package vip.george.p0398;

import java.util.HashSet;
import java.util.Set;

public class P0398 {

    /**
     * 方案1：
     * 双重比遍历字符串，查询t串中，不在s中的字符
     * 错误的题解方式，当s="a" t="aa"时，不能返回正确结果
     * @param s
     * @param t
     * @return
     */
    public char findTheDifference(String s, String t) {
        char result = 0;
        for (char tc : t.toCharArray()) {
            boolean flag = false;
            for (char sc : s.toCharArray()) {
                if (tc == sc) {
                    flag = true;
                    break;
                }
            }
            if (!flag) {
                result = tc;
            }
        }
        return result;
    }


    /**
     * 方案2：
     * 统计字符的个数，当t中某个字符大于s中，则返回该字符
     * @param s
     * @param t
     * @return
     */
    public char findTheDifference1(String s, String t) {
        char result = 0;
        // 先统计t中出现过的字符（去重）
        Set<Character> distinctSet = new HashSet<>();
        for (char tc : t.toCharArray()) {
            distinctSet.add(tc);
        }
        //然后分别统计s和t中当前这个字符的个数
        for (char ch : distinctSet) {
            int tCount = 0;
            for (char tc : t.toCharArray()) {
                if (ch == tc) {
                    tCount++;
                }
            }
            int sCount = 0;
            for (char sc : s.toCharArray()) {
                if (ch == sc) {
                    sCount++;
                }
            }
            if (tCount > sCount) {
                result = ch;
                break;
            }
        }
        return result;
    }

    /**
     * 方案3：
     * 根据字符的ASCII码对应的值相减计算
     * @param s
     * @param t
     * @return
     */
    public char findTheDifference2(String s, String t) {
        int sAsciiSum = 0;
        for (char sc : s.toCharArray()) {
            sAsciiSum += sc;
        }
        int tAsciiSum = 0;
        for (char tc : t.toCharArray()) {
            tAsciiSum += tc;
        }
        return (char)(tAsciiSum - sAsciiSum);
    }

    public static void main(String[] args) {
        P0398 p = new P0398();
        System.out.println(p.findTheDifference2("", "y"));
        System.out.println(p.findTheDifference2("aa", "aaa"));
        System.out.println(p.findTheDifference2("abcd", "abcde"));
        System.out.println(p.findTheDifference2("aabbcc", "aatbbcc"));
    }

}
